import bpy
from mathutils import Vector
# 获取一张图片
if "myimg" in bpy.data.images:
    img = bpy.data.images["myimg"]
else:
    img = bpy.data.images.new(height=1000, width=1000, name="myimg")
p = img.pixels
# 引入噪声噪声函数
from mathutils.noise import fractal
'''
fractal(position, H, lacunarity, octaves, noise_basis='PERLIN_ORIGINAL')
H: 增益参数 可以为负 越负 则黑边边缘越锐利 越大黑白边缘越模糊
lacunarity: 连续频率之间的间隔。 越大 分割越多  极大时 类似于磨砂效果
octaves: 感觉像是调整对比度  <1 时 调节 上两个参数不起作用
'''
vp = Vector(p)
H = img.size[1]
W = img.size[0]
h = 1


def f(vp, p, h, l, o, fac=1):
    for i in range(H):
        for j in range(W):
            k = 4 * (i * W + j)
            f = fractal((i * fac / H, j * fac / W, 0), h, l, o)
            vp[k: k + 4] = (f, f, f, 1)
    p[:] = vp


# fac 控制缩放
f(vp, p, 2, 1, 2, fac=2)
# Note: p.foreach_set(vp) 这个函数的处理速度更快
